#pragma once

#include <vex/core/config.h>

namespace vex {

    namespace core {

        struct unmanaged_tag {};

        class unmanaged {
        protected:
            unmanaged()
            {
            }

            VEX_DEFAULTED_DESTRUCTOR(unmanaged);

            void add_ref()
            {
            }

            template<class TDeleter>
            void release(TDeleter)
            {
            }

            bool has_synchronized_ref_count() const
            {
                return false;
            }

            virtual bool is_shareable() const
            {
                return false;
            }
        public:
            typedef unmanaged_tag ownership_type;
        };
    }

    using core::unmanaged;
    using core::unmanaged_tag;
}